home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / lisp / elk-2_0.lha / elk-2.0 / contrib / zelk / src-zlib / filestats.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-10-17  |  2.2 KB  |  140 lines

  1. /* filestats.c zilla     various info about file
  2.  * modified:
  3.  * 26sep
  4.  * 5dec         add filedirp
  5.  * 5sep         remove filetime to separate file
  6.  * 29aug        minor
  7.  * aug      unix version
  8.  */
  9.  
  10. /*@DOCINIT
  11.  (@HEADERFILE filestats.H)
  12.  (@MANPAGE filestats.MAN filestats 3 unknown portable file information library
  13. */
  14.  
  15. /*@SECTION DESCRIPTION
  16. because programs which use stat are not portable.
  17. */
  18.  
  19.  
  20. #include <theusual.h>
  21. #include <sys/types.h>
  22. #include <sys/stat.h>
  23.  
  24. /*@DOCENTRY 
  25. long Zfilesize(char *path)
  26. */
  27.  
  28. long Zfilesize(path)
  29.   char *path;
  30. {
  31.   struct stat s;
  32.   int code;
  33.   extern int errno;
  34.   
  35.   code = stat(path,&s);
  36.   
  37.   if (code < 0) {
  38.     errno = 0;
  39.     return((long)(-1));
  40.   }
  41.   
  42.   else return((long)s.st_size);
  43.  
  44. } /*Zfilesize*/
  45.  
  46.  
  47. /*@DOCENTRY 
  48. long Zifilesizep(int fptr)
  49. */
  50.  
  51. long Zifilesize(fptr)
  52.   int fptr;
  53. {
  54.   struct stat s;
  55.   int code;
  56.   extern int errno;
  57.   
  58.   code = fstat(fptr,&s);
  59.   
  60.   if (code < 0) {
  61.     errno = 0;
  62.     return((long)(-1));
  63.   }
  64.   else return((long)s.st_size);
  65.   
  66. } /*Zifilesize*/
  67.  
  68.  
  69.  
  70. /*@DOCENTRY
  71. long Zfilesizeext(char *fname,*ext,*errmsg)
  72. */
  73.  
  74. /*extern char *Zfileop();*/
  75.  
  76. long Zfilesizeext(fname,ext,errmsg)
  77.   char *fname,*ext,*errmsg;
  78. {
  79.   struct stat s;
  80.   int f;
  81.   char path[512];
  82.   extern int errno;
  83.   
  84.   if ((f = stat(fname,&s)) < 0) {    /* fname */
  85.     (void)str_cpy(path,fname);
  86.     (void)str_cat(path,ext);
  87.     f = stat(path,&s);        /* fname.ext */
  88.   }
  89.   
  90.   if (f < 0) {
  91.     fflush(stdout);
  92.     if (errmsg && *errmsg) fprintf(stderr,"%s: ",errmsg);
  93.     fprintf(stderr,"can't find %s or %s\n",fname,path);
  94.     exit(1);
  95.   } else errno = 0;
  96.   
  97.   return((long)s.st_size);
  98.   
  99. } /*fsizeext*/
  100.  
  101.  
  102. /*@DOCENTRY 
  103. long Zfiledirp(char *path)
  104. */
  105.  
  106. bool Zfiledirp(path)
  107.   char *path;
  108. {
  109.   struct stat s;
  110.   int f;
  111.   
  112.   if ((f = stat(path,&s)) < 0) {
  113.     perror("Zfiledirp");
  114.     Zfail("Zfiledirp");
  115.   }
  116.   
  117.   return S_ISDIR(s.st_mode);
  118. } /*filedirp*/
  119.  
  120.  
  121. #ifdef TESTIT /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
  122.  
  123. /*% cc -DTESTIT % -lZ -o filestatsTST %*/
  124.  
  125. main(ac,av)
  126.   int ac;
  127.   char *av[];
  128. {
  129.   long (*func)();
  130.   if (str_eq(av[1],"Zfilesize"))
  131.     func = Zfilesize;
  132.   else if (str_eq(av[1],"fsizeext"))
  133.     func = fsizeext;
  134.   else quit(1,"badfunc\n");
  135.   printf("%ld\n",(*func)(av[2]));
  136.   exit(0);
  137. }
  138.  
  139. #endif /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
  140.